/*
 *  marcadores.h
 *  Wilson
 *
 *  Created by Sebastian Orfino on 1/17/12.
 *  Copyright 2012 lbs3. All rights reserved.
 *
 */

#ifndef __marcadores__
#define __marcadores__

#include <string>
#include <adobe/zuid.hpp>
#include <functional>

#include "UIDRef.h"

namespace doc {

	class marcadores {
	
		UIDRef doc_ref_;
		
	public:
		
		explicit marcadores(const UIDRef& docRef) : doc_ref_(docRef) { }
		virtual ~marcadores() {}
		
		/** Selecciona el marcador (kWilNoteSplineBoss) con el id en el documento actual y scrollea hasta dejarlo visible */
		bool seleccionar(const std::string& id);
		
		bool eliminar(const std::string& id);
		
		void visibilidad(bool visibles) const;
		
		/** recorre todos los pageitems marcadores (kWilSplineItemBoss que implementen IWilNoteData) del documento llamando a _func
		 mientras que _func() devuelva false
		 */
		template<typename _FUNC>
		void for_each(_FUNC& _func) const;
		
	private:
		
		UIDRef buscar_pageitem(const std::string& id);
	};
	
	
	/** algoritmos para usar con marcadores::for_each. */
	namespace algo {
		
			/** busca el marcador con el id especificado */
			class buscador : public std::unary_function<const UIDRef&,bool> {
				
				adobe::zuid_t id_buscado_;
				
			public:
				
				UIDRef encontrado;
				
				buscador(const std::string& se_busca): id_buscado_(se_busca), encontrado(UIDRef::gNull) {}
				
				bool operator()(const UIDRef& mref);
				
			};
			
			/** Pone los marcadores visibles o invisibles */
			class setear_visible : public std::unary_function<const UIDRef&,bool> {
				
				bool visible_;
				
			public:
				setear_visible(bool b) : visible_(b){}
				
				bool operator()(const UIDRef& mref);
								
			};
			
			
			/** construye una lista con todos los marcadores en el documento */
			class listar_todos : public std::unary_function<const UIDRef&,bool> {
				
			public:
				UIDList uids;
				
				listar_todos(const UIDRef& doc_ref) : uids(doc_ref.GetDataBase()) {}
				
				bool operator()(const UIDRef& mref);
				
				
			};

	}
}


#endif //__marcadores__